/** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.brixcms.jcr.api.wrapper; import org.brixcms.jcr.api.JcrItem; import org.brixcms.jcr.api.JcrNode; import org.brixcms.jcr.api.JcrNodeIterator; import org.brixcms.jcr.api.JcrProperty; import org.brixcms.jcr.api.JcrPropertyIterator; import org.brixcms.jcr.api.JcrSession; import org.brixcms.jcr.api.JcrSession.Behavior; import org.brixcms.jcr.api.JcrVersion; import org.brixcms.jcr.api.JcrVersionHistory; import javax.jcr.Binary; import javax.jcr.ItemVisitor; import javax.jcr.Node; import javax.jcr.Value; import javax.jcr.lock.Lock; import javax.jcr.nodetype.NodeDefinition; import javax.jcr.nodetype.NodeType; import javax.jcr.version.Version; import javax.jcr.version.VersionManager; import java.io.InputStream; import java.math.BigDecimal; import java.util.Calendar; /** * @author Matej Knopp * @author igor.vaynberg */ public class NodeWrapper extends ItemWrapper implements JcrNode { public static JcrNode wrap(Node delegate, JcrSession session) { if (delegate == null) { return null; } else { Behavior behavior = session.getBehavior(); if (behavior != null) { JcrNode node = behavior.wrap(delegate, session); if (node != null) { return node; } } return new NodeWrapper(delegate, session); } } public NodeWrapper(Node delegate, JcrSession session) { super(delegate, session); } @Override public String toString() { return getPath() + " [" + getPrimaryNodeType().getName() + "]"; } public void accept(final ItemVisitor visitor) { executeCallback(new VoidCallback() { public void execute() throws Exception { visitor.visit(NodeWrapper.this); } }); } /** * @depreated */ @Deprecated @Override public void save() { Behavior behavior = getJcrSession().getBehavior(); if (behavior != null) { behavior.nodeSaved(this); } super.getJcrSession().save(); } @Override public Node getDelegate() { return (Node) super.getDelegate(); } public JcrNode addNode(final String relPath) { return executeCallback(new Callback<JcrNode>() { public JcrNode execute() throws Exception { return JcrNode.Wrapper.wrap(getDelegate().addNode(relPath), getJcrSession()); } }); } public JcrNode addNode(final String relPath, final String primaryNodeTypeName) { return executeCallback(new Callback<JcrNode>() { public JcrNode execute() throws Exception { return JcrNode.Wrapper.wrap(getDelegate().addNode(relPath, primaryNodeTypeName), getJcrSession()); } }); } public void orderBefore(final String srcChildRelPath, final String destChildRelPath) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().orderBefore(srcChildRelPath, destChildRelPath); } }); } public JcrProperty setProperty(final String name, final Value value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, unwrap(value)), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final Value value, final int type) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate() .setProperty(name, unwrap(value), type), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final Value[] values) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { final Value[] unwrapped = unwrap(values, new Value[values.length]); return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, unwrapped), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final Value[] values, final int type) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { final Value[] unwrapped = unwrap(values, new Value[values.length]); return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, unwrapped, type), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final String[] values) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, values), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final String[] values, final int type) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, values, type), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final String value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, value), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final String value, final int type) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, value, type), getJcrSession()); } }); } /** * @depreated */ @Deprecated public JcrProperty setProperty(final String name, final InputStream value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, value), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final Binary value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, unwrap(value)), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final boolean value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, value), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final double value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, value), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final BigDecimal value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, unwrap(value)), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final long value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, value), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final Calendar value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, value), getJcrSession()); } }); } public JcrProperty setProperty(final String name, final Node value) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper.wrap(getDelegate().setProperty(name, unwrap(value)), getJcrSession()); } }); } public JcrNode getNode(final String relPath) { return executeCallback(new Callback<JcrNode>() { public JcrNode execute() throws Exception { return JcrNode.Wrapper.wrap(getDelegate().getNode(relPath), getJcrSession()); } }); } public JcrNodeIterator getNodes() { return executeCallback(new Callback<JcrNodeIterator>() { public JcrNodeIterator execute() throws Exception { return JcrNodeIterator.Wrapper.wrap(getDelegate().getNodes(), getJcrSession()); } }); } public JcrNodeIterator getNodes(final String namePattern) { return executeCallback(new Callback<JcrNodeIterator>() { public JcrNodeIterator execute() throws Exception { return JcrNodeIterator.Wrapper.wrap(getDelegate().getNodes(namePattern), getJcrSession()); } }); } public JcrNodeIterator getNodes(final String[] nameGlobs) { return executeCallback(new Callback<JcrNodeIterator>() { public JcrNodeIterator execute() throws Exception { return JcrNodeIterator.Wrapper.wrap(getDelegate().getNodes(nameGlobs), getJcrSession()); } }); } public JcrProperty getProperty(final String relPath) { return executeCallback(new Callback<JcrProperty>() { public JcrProperty execute() throws Exception { return JcrProperty.Wrapper .wrap(getDelegate().getProperty(relPath), getJcrSession()); } }); } public JcrPropertyIterator getProperties() { return executeCallback(new Callback<JcrPropertyIterator>() { public JcrPropertyIterator execute() throws Exception { return JcrPropertyIterator.Wrapper.wrap(getDelegate().getProperties(), getJcrSession()); } }); } public JcrPropertyIterator getProperties(final String namePattern) { return executeCallback(new Callback<JcrPropertyIterator>() { public JcrPropertyIterator execute() throws Exception { return JcrPropertyIterator.Wrapper.wrap(getDelegate().getProperties(namePattern), getJcrSession()); } }); } public JcrPropertyIterator getProperties(final String[] nameGlobs) { return executeCallback(new Callback<JcrPropertyIterator>() { public JcrPropertyIterator execute() throws Exception { return JcrPropertyIterator.Wrapper.wrap(getDelegate().getProperties(nameGlobs), getJcrSession()); } }); } public JcrItem getPrimaryItem() { return executeCallback(new Callback<JcrItem>() { public JcrItem execute() throws Exception { return JcrItem.Wrapper.wrap(getDelegate().getPrimaryItem(), getJcrSession()); } }); } /** * @depreated */ @Deprecated public String getUUID() { return executeCallback(new Callback<String>() { public String execute() throws Exception { return getDelegate().getUUID(); } }); } public String getIdentifier() { return executeCallback(new Callback<String>() { public String execute() throws Exception { return getDelegate().getIdentifier(); } }); } public int getIndex() { return executeCallback(new Callback<Integer>() { public Integer execute() throws Exception { return getDelegate().getIndex(); } }); } public JcrPropertyIterator getReferences() { return executeCallback(new Callback<JcrPropertyIterator>() { public JcrPropertyIterator execute() throws Exception { return JcrPropertyIterator.Wrapper.wrap(getDelegate().getReferences(), getJcrSession()); } }); } public JcrPropertyIterator getReferences(final String name) { return executeCallback(new Callback<JcrPropertyIterator>() { public JcrPropertyIterator execute() throws Exception { return JcrPropertyIterator.Wrapper.wrap(getDelegate().getReferences(name), getJcrSession()); } }); } public JcrPropertyIterator getWeakReferences() { return executeCallback(new Callback<JcrPropertyIterator>() { public JcrPropertyIterator execute() throws Exception { return JcrPropertyIterator.Wrapper.wrap(getDelegate().getWeakReferences(), getJcrSession()); } }); } public JcrPropertyIterator getWeakReferences(final String name) { return executeCallback(new Callback<JcrPropertyIterator>() { public JcrPropertyIterator execute() throws Exception { return JcrPropertyIterator.Wrapper.wrap(getDelegate().getWeakReferences(name), getJcrSession()); } }); } public boolean hasNode(final String relPath) { return executeCallback(new Callback<Boolean>() { public Boolean execute() throws Exception { return getDelegate().hasNode(relPath); } }); } public boolean hasProperty(final String relPath) { return executeCallback(new Callback<Boolean>() { public Boolean execute() throws Exception { return getDelegate().hasProperty(relPath); } }); } public boolean hasNodes() { return executeCallback(new Callback<Boolean>() { public Boolean execute() throws Exception { return getDelegate().hasNodes(); } }); } public boolean hasProperties() { return executeCallback(new Callback<Boolean>() { public Boolean execute() throws Exception { return getDelegate().hasProperties(); } }); } public NodeType getPrimaryNodeType() { return executeCallback(new Callback<NodeType>() { public NodeType execute() throws Exception { return getDelegate().getPrimaryNodeType(); } }); } public NodeType[] getMixinNodeTypes() { return executeCallback(new Callback<NodeType[]>() { public NodeType[] execute() throws Exception { return getDelegate().getMixinNodeTypes(); } }); } public boolean isNodeType(final String nodeTypeName) { return executeCallback(new Callback<Boolean>() { public Boolean execute() throws Exception { return getDelegate().isNodeType(nodeTypeName); } }); } public void setPrimaryType(final String nodeTypeName) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().setPrimaryType(nodeTypeName); } }); } public void addMixin(final String mixinName) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().addMixin(mixinName); } }); } public void removeMixin(final String mixinName) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().removeMixin(mixinName); } }); } public boolean canAddMixin(final String mixinName) { return executeCallback(new Callback<Boolean>() { public Boolean execute() throws Exception { return getDelegate().canAddMixin(mixinName); } }); } public NodeDefinition getDefinition() { return executeCallback(new Callback<NodeDefinition>() { public NodeDefinition execute() throws Exception { return getDelegate().getDefinition(); } }); } /** * @depreated */ @Deprecated public JcrVersion checkin() { return executeCallback(new Callback<JcrVersion>() { public JcrVersion execute() throws Exception { final Node delegate = getDelegate(); if (delegate instanceof Version) { VersionManager vm = delegate.getSession().getWorkspace().getVersionManager(); if (vm.isCheckedOut(delegate.getPath())) { return JcrVersion.Wrapper.wrap(vm.checkin(delegate.getPath()), getJcrSession()); } } return null; } }); } /** * @depreated */ @Deprecated public void checkout() { executeCallback(new VoidCallback() { public void execute() throws Exception { if (getDelegate() instanceof Version) { VersionManager vm = getDelegate().getSession().getWorkspace().getVersionManager(); vm.checkout(getDelegate().getPath()); } } }); } /** * @depreated */ @Deprecated public void doneMerge(final Version version) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().doneMerge(unwrap(version)); } }); } /** * @depreated */ @Deprecated public void cancelMerge(final Version version) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().cancelMerge(unwrap(version)); } }); } public void update(final String srcWorkspaceName) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().update(srcWorkspaceName); } }); } /** * @depreated */ @Deprecated public JcrNodeIterator merge(final String srcWorkspace, final boolean bestEffort) { return executeCallback(new Callback<JcrNodeIterator>() { public JcrNodeIterator execute() throws Exception { return JcrNodeIterator.Wrapper.wrap(getDelegate().merge(srcWorkspace, bestEffort), getJcrSession()); } }); } public String getCorrespondingNodePath(final String workspaceName) { return executeCallback(new Callback<String>() { public String execute() throws Exception { return getDelegate().getCorrespondingNodePath(workspaceName); } }); } public JcrNodeIterator getSharedSet() { return executeCallback(new Callback<JcrNodeIterator>() { public JcrNodeIterator execute() throws Exception { return JcrNodeIterator.Wrapper.wrap(getDelegate().getSharedSet(), getJcrSession()); } }); } public void removeSharedSet() { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().removeSharedSet(); } }); } public void removeShare() { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().removeShare(); } }); } public boolean isCheckedOut() { return executeCallback(new Callback<Boolean>() { public Boolean execute() throws Exception { return getDelegate().isCheckedOut(); } }); } /** * @depreated */ @Deprecated public void restore(final String versionName, final boolean removeExisting) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().restore(versionName, removeExisting); } }); } /** * @depreated */ @Deprecated public void restore(final Version version, final boolean removeExisting) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().restore(unwrap(version), removeExisting); } }); } /** * @depreated */ @Deprecated public void restore(final Version version, final String relPath, final boolean removeExisting) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().restore(unwrap(version), relPath, removeExisting); } }); } /** * @depreated */ @Deprecated public void restoreByLabel(final String versionLabel, final boolean removeExisting) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().restoreByLabel(versionLabel, removeExisting); } }); } /** * @depreated */ @Deprecated public JcrVersionHistory getVersionHistory() { return executeCallback(new Callback<JcrVersionHistory>() { public JcrVersionHistory execute() throws Exception { return JcrVersionHistory.Wrapper.wrap(getDelegate().getVersionHistory(), getJcrSession()); } }); } /** * @depreated */ @Deprecated public JcrVersion getBaseVersion() { return executeCallback(new Callback<JcrVersion>() { public JcrVersion execute() throws Exception { return JcrVersion.Wrapper.wrap(getDelegate().getBaseVersion(), getJcrSession()); } }); } /** * @depreated */ @Deprecated public Lock lock(final boolean isDeep, final boolean isSessionScoped) { return executeCallback(new Callback<Lock>() { public Lock execute() throws Exception { return getDelegate().lock(isDeep, isSessionScoped); } }); } /** * @depreated */ @Deprecated public Lock getLock() { return executeCallback(new Callback<Lock>() { public Lock execute() throws Exception { return getDelegate().getSession().getWorkspace().getLockManager().getLock(getDelegate().getPath()); } }); } /** * @depreated */ @Deprecated public void unlock() { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().unlock(); } }); } /** * @depreated */ @Deprecated public boolean holdsLock() { return executeCallback(new Callback<Boolean>() { public Boolean execute() throws Exception { return getDelegate().holdsLock(); } }); } public boolean isLocked() { return executeCallback(new Callback<Boolean>() { public Boolean execute() throws Exception { return getDelegate().isLocked(); } }); } public void followLifecycleTransition(final String transition) { executeCallback(new VoidCallback() { public void execute() throws Exception { getDelegate().followLifecycleTransition(transition); } }); } public String[] getAllowedLifecycleTransistions() { return executeCallback(new Callback<String[]>() { public String[] execute() throws Exception { return getDelegate().getAllowedLifecycleTransistions(); } }); } }